package br.edu.delta.service;

import java.util.Collection;

import javax.inject.Inject;

import br.edu.delta.bo.EmprestimoBO;
import br.edu.delta.model.Emprestimo;
import br.edu.delta.model.Leitor;
import br.edu.delta.model.Livro;

/**
 * <p>
 * <b>Title:</b> EmprestimoService
 * </p>
 * 
 * <p>
 * <b>Description:</b> EmprestimoService
 * </p>
 * 
 * <p>
 * <b>Company: </b>
 * </p>
 * 
 * @author Denis
 * 
 * @version 1.0.0
 */
public class EmprestimoService extends AppService<Emprestimo, EmprestimoBO> {

	/** Atributo serialVersionUID. */
	private static final long serialVersionUID = 1L;

	/** Atributo bo. */
	@Inject
	private EmprestimoBO bo;

	/** Atributo leitorService. */
	@Inject
	private LeitorService leitorService;

	/** Atributo livroService. */
	@Inject
	private LivroService livroService;

	/** Atributo configuracoesService. */
	@Inject
	private ConfiguracoesService configuracoesService;
	
	public Integer qtdMaximaItensEmprestar(){
		
		return this.getConfiguracoesService().obter(1L).getQtdMaximaItensEmprestimo();
	}

	/**
	 * Método responsável por pesquisar leitor por id
	 * 
	 * @author Denis
	 * 
	 * @param id
	 * @return
	 */
	public Leitor pesquisarLeitorPorId(Long id) {

		return this.getLeitorService().obter(id);
	}

	/**
	 * Método responsável por retornar lista de leitores por nome
	 * 
	 * @author Denis
	 * 
	 * @param nome
	 * @return
	 */
	public Collection<String> pesquisarLeitores(String nome) {

		return this.getLeitorService().pesquisarLeitoresPorNome(nome);
	}

	public Leitor pesquisarLeitorPorNome(String nome) {

		return this.getLeitorService().pesquisarLeitorPorNome(nome);
	}

	/**
	 * Método responsável por pesquisar livro por id
	 * 
	 * @author Denis
	 * 
	 * @param codigo
	 * @return
	 */
	public Livro pesquisarLivroPorCodigo(Long codigo) {

		return this.getLivroService().pesquisarLivroPorCodigo(codigo);
	}

	public Collection<String> pesquisarLivros(String nome) {

		return this.getLivroService().pesquisarLivrosPorNome(nome);
	}

	public Livro pesquisarLivroPorNome(String nome) {

		return this.getLivroService().pesquisarLivroPorNome(nome);
	}

	/**
	 * @see br.com.javagyn.service.base.Service#getBo()
	 */
	@Override
	public EmprestimoBO getBo() {

		return this.bo;
	}

	/**
	 * Retorna o valor do atributo <code>leitorService</code>
	 * 
	 * @return <code>LeitorService</code>
	 */
	public LeitorService getLeitorService() {

		return leitorService;
	}

	/**
	 * Retorna o valor do atributo <code>livroService</code>
	 * 
	 * @return <code>LivroService</code>
	 */
	public LivroService getLivroService() {

		return livroService;
	}

	/**
	 * Retorna o valor do atributo <code>configuracoesService</code>
	 * 
	 * @return <code>ConfiguracoesService</code>
	 */
	public ConfiguracoesService getConfiguracoesService() {

		return configuracoesService;
	}

	public Emprestimo obterEmprestimo(Leitor leitor) {

		return this.getBo().obterEmprestimo(leitor);
	}

}
